The purpose of the espresso minimization program is to find a logically equivalent set of product-terms to represent the ON-set and optionally minterms which lie in the DC-set, without containing any minterms of the OFF-set.
A Boolean function can be described in one of the following ways:
If at all possible, espresso should be given the DC-set (either implicitly or explicitly) in order to improve the results of the minimization.
A term is represented by a "cube" which can be considered either a compact representation of an algebraic product term which implies the function value is a 1, or as a representation of a row in a PLA which implements the term. A cube has an input part which corresponds to the input plane of a PLA, and an output part which corresponds to the output plane of a PLA (for the multiple-valued case, see below).
Each position in the input plane corresponds to an input variable where a 0 implies the corresponding input literal appears complemented in the product term, a 1 implies the input literal appears uncomplemented in the product term, and - implies the input literal does not appear in the product term.
With logical type f, for each output, a 1 means this product term belongs to the ON-set, and a 0 or - means this product term has no meaning for the value of this function. This logical type corresponds to an actual PLA where only the ON-set is actually implemented.
With logical type fd (the default), for each output, a 1 means this product term belongs to the ON-set, a 0 means this product term has no meaning for the value of this function, and a - implies this product term belongs to the DC-set.
With logical type fr, for each output, a 1 means this product term belongs to the ON-set, a 0 means this product term belongs to the OFF-set, and a - means this product term has no meaning for the value of this function.
With logical type fdr, for each output, a 1 means this product term belongs to the ON-set, a 0 means this product term belongs to the OFF-set, a - means this product term belongs to the DC-set, and a ~ implies this product term has no meaning for the value of this function.
Note that regardless of the logical type of PLA, a ~ implies the product term has no meaning for the value of this function. 2 is allowed as a synonym for -, 4 is allowed for 1, and 3 is allowed for ~. Also, the logical PLA type can also be specified on the command line.
The binary variables are given as described above. Each of the multiple-valued variables are given as a bit-vector of 0 and 1 which have their usual meaning for multiple-valued functions. The last multiple-valued variable (also called the output) is interpreted as described above for the output (to split the function into an ON-set, OFF-set and DC-set). A vertical bar "|" may be used to separate the multiple-valued fields in the input file.
If the size of the multiple-valued field is less than zero, than a symbolic field is interpreted from the input file. The absolute value of the size specifies the maximum number of unique symbolic labels which are expected in this column. The symbolic labels are white-space delimited strings of characters.
To perform a kiss-style encoding problem, either the keyword .kiss must be in the file, or the -kiss option must be used on the command line. Further, the third to last variable on the input file must be the symbolic "present state", and the second to last variable must be the "next state". As always, the last variable is the output. The symbolic "next state" will be hacked to be actually part of the output.
# 2-bit by 2-bit binary adder (with no carry input) .i 4 .o 3 .type fr .pair 2 (1 3) (2 4) .phase 011 00 00 000 00 01 001 00 10 010 00 11 011 01 00 001 01 01 010 01 10 011 01 11 100 10 00 010 10 01 011 10 10 100 10 11 101 11 00 011 11 01 100 11 10 101 11 11 110 .end
The logical format for this input file (i.e., type fr) is given to indicate that the file contains both the ON-set and the OFF-set. Note that in this case, the zeros in the output plane are really specifying "value must be zero" rather than "no information".
The imbedded option .pair indicates that the first binary-valued variable should be paired with the third binary-valued variable, and that the second variable should be paired with the fourth variable. The function will then be mapped into an equivalent multiple-valued minimization problem.
The imbedded option .phase indicates that the positive-phase should be used for the second and third outputs, and that the negative phase should be used for the first output.
.mv 8 5 4 27 10 0-010|1000|100000000000000000000000000|0010000000 10-10|1000|010000000000000000000000000|1000000000 0-111|1000|001000000000000000000000000|0001000000 0-10-|1000|000100000000000000000000000|0001000000 00000|1000|000010000000000000000000000|1000000000 00010|1000|000001000000000000000000000|0010000000 01001|1000|000000100000000000000000000|0000000010 0101-|1000|000000010000000000000000000|0000000000 0-0-0|1000|000000001000000000000000000|1000000000 10000|1000|000000000100000000000000000|0000000000 11100|1000|000000000010000000000000000|0010000000 10-10|1000|000000000001000000000000000|0000000000 11111|1000|000000000000100000000000000|0010000000 . . . 11111|0001|000000000000000000000000001|0000000000
.mv 8 5 -10 -10 6 .type fr .kiss # This is a translation of IOFSM from OPUS # inputs are IO1 IO0 INIT SWR MACK # outputs are WAIT MINIT MRD SACK MWR DLI # reset logic --1-- - init0 110000 # wait for INIT to go away --1-- init0 init0 110000 --0-- init0 init1 110000 # wait for SWR --00- init1 init1 110000 --01- init1 init2 110001 # Latch address --0-- init2 init4 110100 # wait for SWR to go away --01- init4 init4 110100 --00- init4 iowait 000000 # wait for command from MFSM 0000- iowait iowait 000000 1000- iowait init1 110000 01000 iowait read0 101000 11000 iowait write0 100010 01001 iowait rmack 100000 11001 iowait wmack 100000 --01- iowait init2 110001 # wait for MACK to fall (read operation) --0-0 rmack rmack 100000 --0-1 rmack read0 101000 # wait for MACK to fall (write operation) --0-0 wmack wmack 100000 --0-1 wmack write0 100010 # perform read operation --0-- read0 read1 101001 --0-- read1 iowait 000000 # perform write operation --0-- write0 iowait 000000 .end